﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ServiceModel;
using KerriganDataContract;
using System.IO;
using System.ServiceModel.Web;
using KerriganDataContract.Customer;
using KerriganDataContract.Person;
using KerriganDataContract.Session;
using KerriganDataContract.Vehicule;
using KerriganDataContract.Intructor;
using KerriganDataContract.Formation;
using KerriganDataContract.Agency;


namespace KerriganInterface.IServiceClient
{
    [ServiceContract]
    public interface IDirectionService
    {
        #region Person

        [OperationContract]
        PersonDC GetPerson(int id);

        #endregion

        #region Customer

        [OperationContract]
        CustomerDC GetCustomer(int id);

        [OperationContract]
        void AddCustomer(CustomerDC dc);

        [OperationContract]
        void DeleteCustomer(CustomerDC dc);

        #endregion

        #region Session

        [OperationContract]
        List<vwGetSession> GetListSessionsToDisplay();

        [OperationContract]
        SessionDC GetSession(int id);

        [OperationContract]
        void DeleteSession(int id);

        [OperationContract]
        void SetSession(SessionDC bo);

        [OperationContract]
        List<FormationDC> GetListFormations();

        [OperationContract]
        List<LevelSessionDC> GetListLevelSessions();

        [OperationContract]
        List<FormationCategoryDC> GetFormationCategories();

        #endregion

        #region Vehicle

        [OperationContract]
        List<vwGetVehicle> GetListVehiclesToDisplay();

        [OperationContract]
        List<vwGetVehicleAvailability> GetListVehiclesAvailabilityToDisplay();

        [OperationContract]
        VehicleDC GetVehicle(int id);

        [OperationContract]
        void DeleteVehicle(int id);

        [OperationContract]
        void SetVehicle(VehicleDC bo);

        [OperationContract]
        List<VehicleDC> GetListVehicle();

        [OperationContract]
        List<TypeVehicleDC> GetListTypeVehicle();

        [OperationContract]
        List<GetVehicleAvailableByDate_Result> GetVehicleAvailableByDate(DateTime StartDate, DateTime EndDate);

        #endregion

        #region Instructor

        [OperationContract]
        List<vwGetInstructor> GetListInstructorsToDisplay();

        [OperationContract]
        InstructorDC GetInstructor(int id);

        [OperationContract]
        void DeleteInstructor(int id);

        [OperationContract]
        void SetInstructor(InstructorDC bo);

        [OperationContract]
        List<InstructorDC> GetListInstructor();

        [OperationContract]
        List<InstructorAvailabilityDC> GetListInstructorAvailable();

        [OperationContract]
        void AddAvaibilityForInstructor(InstructorAvailabilityDC dc);

        [OperationContract]
        void DeleteInstructorAvaibility(int id);

        [OperationContract]
        List<GetInstructorAvaibleBySession_Result> GetListInstructorBySession(SessionDC bo);

        [OperationContract]
        List<vwGetInstructorAvailability> GetListInstructorsAvailabilityToDisplay();

        #endregion

        #region Agency

        [OperationContract]
        List<AgencyDC> GetListAgency();

        #endregion
    }
}
